package test_pkg

import "fmt"

//通道可以被显式的关闭；尽管它们和文件不同：不必每次都关闭。
//只有在当需要告诉接收者不会再提供新的值的时候，才需要关闭通道。只有发送者需要关闭通道，接收者永远不会需要
//close 关闭通道
func send(ch chan int) {
	ch <- 1
	ch <- 2
	ch <- 3
	close(ch)
}

// 在 for 循环中接收的时候，当关闭或者阻塞的时候使用 break：
func get(ch chan int) {
	// for {
	// 	v, ok := <-ch //v 能接收到时 ok 为 true
	// 	if !ok {
	// 		break
	// 	}

	// 	fmt.Printf("v: %v\n", v)
	// }

	//使用 for-range 语句来读取通道是更好的办法，因为这会自动检测通道是否关闭
	for v := range ch {
		fmt.Printf("v: %v\n", v)
	}
}

func Test_chan_close() {
	ch := make(chan int)
	go send(ch)
	get(ch)
}
